//=======================================Copyright(c)===========================================
// 								  深圳易马达科技有限公司
//---------------------------------------文件信息----------------------------------------------
//文件名   	: Version.h
//创建人  	: Handry
//创建日期	: 
//描述	    : 版本信息头文件
//-----------------------------------------------当前版本修订----------------------------------
//修改人   	:
//版本	    :
//修改日期	:
//描述	    :
//=============================================================================================
#ifndef __VERSION_H
#define __VERSION_H

//=============================================================================================
//包含头文件
//=============================================================================================
#include "BSPTypeDef.h"
#include "BatteryInfo.h"

//=============================================================================
//数据结构声明
//=============================================================================
//APP 版本信息结构体
typedef struct
{
    u32 appcrc;			//APP段的crc
    u32 length;			//APP占内存大小
    u8  swmain;			//软件主版本号
    u8  swsub1;			//软件主修订版本号
    u8  swsub2;			//软件子修订版本号
    u8  swbuild[4];		//编译次数，低位在前
    u8  hwmain;			//硬件主版本号
    u8  hwsub;			//硬件子版本号
    u8  reserve[107];	//保留
    u32 info_crc;
}t_VERSION_INFO;


typedef enum _BOOT_CONFIG_ADDR		//用户自定义内存区	0x08007F00-0x08007F7F	共 2 *1024 个字节
{
    e_BOOT_STAY_FLAG_ADDR 		= 0x08007800,           //转发模志存放地址
    e_BOOT_PRO_FLAG_ADDR 		= 0x08007808,           //应用程序标志
    e_BOOT_PRO_TRY_FLAG_ADDR 	= 0x08007810,           //尝试运行标志
}e_BOOT_CONFIG_ADDR;

//=============================================================================================
//声明变量，供外部使用
//=============================================================================================
extern t_VERSION_INFO cAPPInfo;
extern u8 gHwVerRead[4];
extern u8 gBLVerRead[4];

//=============================================================================================
//宏定义
//=============================================================================================
#define 	BOOTLOADER_BASE     0x08000000UL 						//BOOT层地址
#define 	APPLICATION_BASE    0x08008000UL 						//应用层地址

#define     APP_LENGTH          256 * 1024 - (APPLICATION_BASE - BOOTLOADER_BASE)
#define     APPINFO_ADDR        ((t_VERSION_INFO *)0x08007F80)
#define 	FW_PROTOCOL_VER			0x000A 							//协议版本

#define     HW_VER_ADDR         0x08000FFC       //硬件版本存放地址
#define     BL_VER_ADDR         0x08000FF8       //BootLoader版本存放地址

#define     BOOT_STAY_FLAG      (u64)(0x1234567812345678)    //停留BOOT标志
#define     BOOT_PRO_FLAG       (u64)(0x5AA55AA55AA55AA5)    //跳转应用程序标志
#define     BOOT_PRO_TRY_FLAG   (u64)(0x9988776655443322)    //已经尝试的标志
#define     CLEAR_FLAG   		(u64)(0xFFFFFFFFFFFFFFFF)    //情况标志

//-----------------------------------版本信息---------------------------------------------------
#define 	FW_VER_MAIN 		1								//主版本号
#define 	FW_VER_S1 			0      							//主修订版本号
#define 	FW_VER_S2 			0     							//子修订版本号
#define 	FW_VER_BUILD 		(FW_APP_BUILD_NUM)				//由pre-build命令自动加1更新
#define 	FW_APP_BUILD_NUM 	1								//编译次数，用于判断是否已经重新编译

#define 	HW_PCB_VER 			0

#define 	HW_VER_MAIN 		((BAT_VER_SE_CODE << 4) + HW_VER_MAIN_BAT_TYPE)	//硬件主版本号，包含电池串数信息
#define 	HW_VER_SUB 			((BAT_TYPE << 4) + HW_PCB_VER)			        //硬件子版本号，包含电池型号信息

//=============================================================================================
//声明接口函数
//=============================================================================================
//=============================================================================================
//函数名称	: void BootloaderInit(void)
//输入参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: BOOTLOADER初始化
//注    意	:
//=============================================================================================
void BootloaderInit(void);

//=============================================================================================
//函数名称	: void JumpToBootloader(void)
//输入参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 跳转到BOOTLOADER
//注    意	:
//=============================================================================================
void JumpToBootloader(void);

//=============================================================================================
//函数名称	: void JumpToApplication(void)
//输入参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 跳转到Application应用层
//注    意	:
//=============================================================================================
void JumpToApplication(void);

//=============================================================================================
//函数名称	: void SoftReset(void)
//输入参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 软件复位
//注    意	:
//=============================================================================================
void SoftReset(void);

#endif

/*****************************************end of Version.h*****************************************/
